package com.ruoyi.teaching.util;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateExceptionHandler;

import java.io.*;
import java.util.Map;

public class ExportExcelUtil {

    public static String exportExcel(Map<String, Object> map, Map<String, Object> exlParam) {
        Template dateTmp = null;
        Writer fw = null;
        InputStream in = null;
        OutputStream out = null;
        try {
            // 此处需要给你个版本信息，Configuration cfg = new Configuration();这个方法已经过时了
            Configuration cfg = new Configuration(Configuration.VERSION_2_3_28);
            String tempFoldPath = (String) map.get("tempFoldPath"); // 模板所在的路径
            String file = (String) map.get("file");// 生成表格模板的路径
            String tampPath = (String) map.get("tampPath");// 模板名称
            String excelName = (String) map.get("excelName");// 最后生成表格的名称

            // **********初始化参数**********
            File tempFoldFile = new File(tempFoldPath);
            if (!tempFoldFile.exists()) {
                tempFoldFile.mkdirs();
            }
            cfg.setDirectoryForTemplateLoading(tempFoldFile);
            cfg.setDefaultEncoding("UTF-8");
            cfg.setTemplateUpdateDelay(0);
            cfg.setTemplateExceptionHandler(TemplateExceptionHandler.RETHROW_HANDLER);
            // **********获取freemaker模板**********
            dateTmp = cfg.getTemplate(tampPath);

            // **********将数据写入freemaker模板**********
            fw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(file)), "UTF-8"));
            dateTmp.process(exlParam, fw);

            // **********从freemaker模板读出数据写到Excel表格并生成出来**********
            String fileDir = "excel";
            // 文件保存目录  项目目录下面
            String filePath =  new File("").getAbsolutePath();
            // 生成保存文件路径
            String createPath = filePath + "/" + fileDir + "/";
            // 构建源文件
            File files = new File(file);
            // 文件夹不存在就创建
            createFolder(createPath);
            // 删除原来的文件
            deleteFile(createPath + excelName);
            // 构建目标文件
            File fileCopy = new File(createPath + excelName);
            // 目标文件不存在就创建
            if (!(fileCopy.exists())) {
                fileCopy.createNewFile();
            }
            // 源文件创建输入流
            in = new FileInputStream(files);
            // 目标文件创建输出流
            out = new FileOutputStream(fileCopy, true);
            // 创建字节数组
            byte[] temp = new byte[1024];
            int length = 0;
            // 源文件读取一部分内容
            while ((length = in.read(temp)) != -1) {
                // 目标文件写入一部分内容
                out.write(temp, 0, length);
            }
            // 资源服务器访问目录 这边需要配置tomcat的虚拟路径，就可以直接在url上面下载表格了
            String serverPath = "resourceServer";
            String savePath = "/" + serverPath + "/" + fileDir + "/" + excelName;
            // 服务器图片访问目录
            return savePath;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        } finally {
            try {
                fw.close();
                // 关闭文件输入输出流
                in.close();
                out.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

        }

    }

    // 创建文件
    public static boolean createFolder(String path) {
        File file = new File(path);
        if (!file.exists()) {
            return file.mkdir();
        } else {
            return true;
        }
    }

    public static boolean deleteFile(String filePath) {// 删除单个文件
        boolean flag = false;
        File file = new File(filePath);
        if (file.exists() && file.isFile()) {
            file.delete();// 文件删除
            flag = true;
        }
        return true;
    }

}
